package thread;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wx
 * Date: 2023-12-07
 * Time: 1:03
 */
//等待线程(结束)
// 多个线程的执行顺序是不确定的(随机调度,抢占式执行)
// 虽然线程底层的调度是无序的,但是可以在应用程序中,通过一些api,来影响到线程执行的顺序
// join就是一种方式(影响的线程结束的先后顺序)
// join可使线程结束.
public class ThreadDemo13 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("这是一个线程,正在执行打印.");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            System.out.println("线程打印结束");
        });
        t.start();
        //使用join就可以解决这个问题了
        //在 main 线程 调用 t.join()
        // 让main线程 等待 t 线程结束[谁等谁这个问题,一定要搞清楚]
        //                         (系统元素api这样设定的).
        t.join();
        System.out.println("这是主线程,期望这个日志在 t 结束后打印");
    }
    public static void main1(String[] args) throws InterruptedException {
        Thread t = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("这是一个线程,正在执行打印.");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            System.out.println("线程打印结束");
        });
        t.start();
        Thread.sleep(5000);//这样也难以实现,线程的执行是随机的,到了5000,不知道那个实现执行的.
        //这种期望是难以实现的,线程的调度是随机的;
        //这是因为 run方法 的执行时间不可预期所引起的;
        System.out.println("这是主线程,期望这个日志在 t 结束后打印");
    }
}
